home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagg_m.zip
/
GRAPHICS.SWG
/
0121_VGA 640X480x16.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-08-24
|
1KB
|
73 lines
{
NV> Could somebody tell me how to use mode 640x480x16? I
NV> don't mean using it with int 10, 'cause it's too slow,
NV> but writing directly to VGA memory. So how do I draw a
NV> pixel and how do I read a pixel?
well, you set the mode with:
ASM MOV AX, 12h; INT 10h; END;
and then draw a pixel with: }
PROCEDURE plot_640x480x16(x, y : WORD; c : BYTE); ASSEMBLER;
ASM
{$IFDEF DPMI}
MOV ES, SEGA000
{$ELSE}
MOV AX, $A000
MOV ES, AX
{$ENDIF}
MOV DI, x
MOV CX, DI
SHR DI, 3
MOV AX, 80
MUL y
ADD DI, AX
AND CL, $07
MOV AH, $80
SHR AH, CL
MOV AL, $08
MOV DX, $03CE
OUT DX, AX
MOV AL, c
MOV AH, [ES:DI]
MOV [ES:DI], AL
END;
{ and read a pixel with: }
FUNCTION point_640x480x16(x, y : WORD) : BYTE; ASSEMBLER;
ASM
MOV AX, 80
MUL y
MOV SI, x
MOV CX, SI
SHR SI, 3
ADD SI, AX
AND CL, $07
XOR CL, $07
MOV CH, 1
SHL CH, CL
{$IFDEF DPMI}
MOV ES, SEGA000
{$ELSE}
MOV AX, $A000
MOV ES, AX
{$ENDIF}
MOV DX, $03CE
MOV AX, 772
XOR BL, BL
@gp1:
OUT DX, AX
MOV BH, ES:[SI]
AND BH, CH
NEG BH
ROL BX, $0001
DEC AH
JGE @gp1
MOV AL, BL
END;